#pragma once

#include <map>
#include <vector>

#include "Globals.h"
//#include "rapidxml.hpp"
#include "SequenceInfo.h"

//using namespace rapidxml;
namespace game_engine { namespace data_format
{

/*!
 * \class AnimDescriptor
 * \brief 
 */
class AnimDescriptor
{
///////////////////////////////////////////////////////////////////////////////
// Attribute definition
///////////////////////////////////////////////////////////////////////////////
private:
    string filename;
    string fileContent;
    xml_document<> doc;
    utils::Size frameSize;
    utils::Point anchor;
    map<string, vector<SequenceInfo>> sequences;

///////////////////////////////////////////////////////////////////////////////
// Method definition
///////////////////////////////////////////////////////////////////////////////
public:
    // Constructors and Destructors
    AnimDescriptor(void);
    AnimDescriptor(const string &file);
    virtual ~AnimDescriptor(void);

    // Others
    void parse(const string &texture);

    // Getters
    const map<string, vector<SequenceInfo>>& getAllSequences(void) const;
    const vector<SequenceInfo>& getSequences(const string &name) const;
    const utils::Size& getFrameSize(void) const;
    const utils::Point& getAnchor(void) const;

private:
    void readAll(void);
    void getFrameSize(xml_node<> *node);
    void getAnchorPoint(xml_node<> *node);
    vector<SequenceInfo> buildSequenceList(xml_node<> *node);

};
}}
